Classes and objects are general concepts in computer object technology. A class describes behavior and content of an object. An object is referred to as the instantiation of a class. Classes are also called types.
An object is a piece of intelligence that encapsulates code and data. In contrast, a distributed object is a piece of intelligence that can live anywhere on a network. Distributed objects are packaged as independent pieces of code that can be accessed by remote clients via method invocations. Distributed objects are independent software components, which are smart pieces of software that can operate in different networks, operating systems and tool palettes. A component is an object that is not bound to a particular program, computer language or implementation. Objects are the optimal building blocks for creating the next generation of distributed systems.
A repository is a software system for storing, managing, sharing, and reusing classes and objects. In a repository, classes are used to describe information models. Models are abstractions of real-world concepts such as ideas, objects, or systems. Repository information models define information stored in repositories and identify repository functionality.
Classes define types for the repository information model and provide a common structure for information in a repository. A type describes a set of features--the state and behavior--that an object or another type can possess. A type defines a pattern that can be used to create or identify objects. A model is defined by a hierarchy of types. A type that is derived from one or more other types is called a subtype. The definition of a type identifies the type or types from which it is derived. A type from which a subtype is derived is called a supertype. A subtype inherits all the features of its supertype, and can be customized by adding new features and by overriding features in its supertypes.
Features fall into two categories: properties and operations. Properties define state and operations define behavior. Properties are further divided into attributes, whose values are embedded within the owning objects, and references, whose values are independent objects.
An object is an instance of a type. An object of a specified type can be cast to one of its supertypes (up cast or widened) or one of its subtypes (down cast or narrowed). After a successful cast, the properties and features of the type to which the cast was made are in effect for the object.
Metadata provides the mechanisms for discovery and modification of repository models. Metadata also describes the characteristics and internal relationships of these types and features. A metamodel embodies the collective metadata description of a repository information model. Similarly, a metaclass is the metadata description of a class, a metafeature is the metadata description of a feature, etc. Using a metadata interface, a program can determine all of the types and features in a model.
A repository is accessed through an object interface; and, through this interface, a program can create new objects, obtain references to existing objects, and invoke operations on objects. A distributed object interface provides a program with access to the repository over a computer communications network.
In order to operate on an object a program must have an object reference to that object. The instantiation of a class for a program produces an object reference. If the object lives within the process of the program wanting to perform an operation on the object, the object reference may simply be an address in the address space of that process. If the object is distributed, however, a distributed object reference that can reference objects existing in different processes in different computers is needed. An object factory is a module (typically a distributed object) which contains operations that return distributed object references when invoked.
An object interface is defined using an interface definition language. Whether the objects are distributed or not, this language specifies the interface as presented by the objects to the world, without defining the inner workings of the objects. The interface definition of a repository information model is all the knowledge that a program will need in order to access the information model in a repository. In a preferred embodiment special compilers will generate language specific object interfaces directly from the interface definition language.
An object request broker ("ORB") manages and performs the actual message transportation between a program client and a server repository. Given the proper implementation of the client to object request broker interface and object request broker to repository interface, the client needs no knowledge whatsoever as to where the repository objects are located; the repository or repositories could be located on the local computer or on one or more remote computers.
CORBA, or Common Object Request Broker Architecture, is a specification established by the Object Management Group ("OMG"), that provides the standard interface definition between OMG-compliant objects. CORBA is more than an Object Request Broker. It is a complete distributed object platform. An ORB allows clients to invoke methods on remote objects, whereas CORBA extends the reach of applications across networks, languages, component boundaries and operating systems. CORBA was designed to allow intelligent components to discover each other and interoperate. However, CORBA goes beyond just interoperability. It also specifies an extensive set of services for creating and deleting objects, accessing them by name, storing them in persistent stores, externalizing their states and defining ad hoc relationships between them.
For more detailed information on CORBA and distributed objects, reference is made to a textbook entitled "The Essential Distributed Objects, Survival Guide" by Robert Orfali, Dan Harkey, and Jeri Edwards, published in 1996, by John Wiley & Sons, Inc.